#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aUv;


/*
使用uniform缓冲块，只需要配置一次。
我们在OpenGL代码中将这些矩阵值存入缓冲中，每个声明了这个Uniform块的着色器都能够访问这些矩阵。
  std140 ：当前定义的Uniform块对它的内容使用一个特定的内存布局

  layout (std140,binding = 2) uniform ExampleBlock  从OpenGL 4.2版本起，你也可以添加一个布局标识符，显式（binding=2）地将Uniform块的绑定点储存在着色器中
{
                     // 基准对齐量       // 对齐偏移量
    float value;     // 4               // 0
    vec3 vector;     // 16              // 16  (必须是16的倍数，所以 4->16)
    mat4 matrix;     // 16              // 32  (列 0)
                     // 16              // 48  (列 1)
                     // 16              // 64  (列 2)
                     // 16              // 80  (列 3)
    float values[3]; // 16              // 96  (values[0])
                     // 16              // 112 (values[1])
                     // 16              // 128 (values[2])
    bool boolean;    // 4               // 144
    int integer;     // 4               // 148
};
好处：
第一，一次设置很多uniform会比一个一个设置多个uniform要快很多。
第二，比起在多个着色器中修改同样的uniform，在Uniform缓冲中修改一次会更容易一些。
第三，如果使用Uniform缓冲对象的话，你可以在着色器中使用更多的uniform。OpenGL限制了它能够处理的uniform数量，
	 这可以通过GL_MAX_VERTEX_UNIFORM_COMPONENTS来查询。当使用Uniform缓冲对象时，最大的数量会更高。
*/

//layout (std140) uniform Matrices
//{
//	mat4 project;
//	mat4 view;
//};
uniform mat4 model;
uniform mat4 view;
uniform mat4 project;
out vec2 UV;
out vec3 Position;
/**
 接口块：in/out，打包管理所有输入输出变量
 顶点和片段着色器 名称要一致
*/
out VS_OUT
{
	vec2 UV;
}vs_out;

void main()
{
	vs_out.UV=aUv;
	gl_Position = project * view * model * vec4(aPos, 1.0);
	//gl_PointSize 图元的大小
	gl_PointSize = gl_Position.z*10;
}